10DIMa(4,4),b(4,4):i=RND(-TIME):c=0:FORm=1TO10:REPEAT:x=RND(5)-1:y=RND(5)-1
20UNTILb(y,x)=0:b(y,x)=1:GOSUB90:NEXT:MODE4:VDU23,1,0;0;0;0;:m=0:x=0:y=0:*FX4,1
30GOSUB60:GCOL0,1:GOSUB80:REPEAT:g=GET-136:GCOL0,0:GOSUB80
40x=(x-(g=0)*4-(g=1))MOD5:y=(y-(g=3)*4-(g=2))MOD5:IFg=-104THENm=m+1:GOSUB90
50GOSUB60:GCOL0,1+(c=0):GOSUB80:UNTILc=0:VDU23,1,1;0;0;0;:OSCLI"FX4,0":END
60FORj=0TO4:FORi=0TO4:GCOL0,a(j,i):MOVEi*128+4,1020-j*128-4:PLOT0,120,0
70PLOT81,-120,-120:PLOT81,120,0:NEXT,:PRINTTAB(0,21);"moves=";m:RETURN
80MOVEx*128,1020-y*128:PLOT1,128,0:PLOT1,0,-128:PLOT1,-128,0:PLOT1,0,128:RETURN
90FORj=-1TO1:FORi=-1TO1:IFi*j<>0ORy+j<0ORy+j>4ORx+i<0ORx+i>4THENNEXT,:RETURN
100a(y+j,x+i)=a(y+j,x+i)EOR1:c=c+(a(y+j,x+i)=0)*2+1:NEXT,:RETURN
